import core from '@/core/'
import color from './color'
import sizeAction from './fontSize'
import fontFamily from './fontFamily'
import fontWeight from './fontWeight'

// 基本数值 - 可根据屏幕信息变化
const base = {
	fontSize: 14, // 一般字体
	horizontal: 15, // 一般横向间距
	vertical: 15, // 一般纵向间距
	// 计算的时候必须大于1。所以实际填写0.2也可以
	fontScale: 1.2, // 字体递增或者递减的比例
}

/**
 * 加载状态的内容
 * 初始化之后src都要换成图片地址
 * type: 1。不能与页面数据共存，如果是1，就要替换页面数据
 * type: 0。可与页面内容共存
 */
const load = {
	loading: {
		type: 0,
		text: '正在加载中',
		icon: 'loading',
		color: '#999999',
		font: 12,
		src: '',
		size: 50
	},
	noMore: {
		type: 0,
		text: '没有更多的数据了',
		icon: '',
		color: '#999999',
		font: 12,
		src: '',
		size: 80
	},
	noData: {
		type: 0,
		text: '没有任何数据',
		icon: 'nodata',
		color: '#999999',
		font: 12,
		src: '',
		size: 80
	},
	more: {
		type: 0,
		text: '点击加载更多的数据',
		icon: '',
		color: '#999999',
		font: 12,
		src: '',
		size: 80
	},
	error: {
		type: 0,
		text: '请求错误',
		icon: 'error',
		color: '#999999',
		font: 12,
		src: '',
		size: 80
	},
	params: {
		type: 0,
		text: '参数错误',
		icon: 'cuo',
		color: '#999999',
		font: 12,
		src: '',
		size: 80
	},
	authority: {
		type: 1,
		text: '没有权限',
		icon: 'noau',
		color: '#999999',
		font: 12,
		src: '',
		size: 80
	},
	login: {
		type: 1,
		text: '没有登录',
		icon: 'logout',
		color: '#999999',
		font: 12,
		src: '',
		size: 80
	},
	target: {
		type: 1,
		text: '项目已过期',
		icon: 'downshelf',
		color: '#999999',
		font: 12,
		src: '',
		size: 80
	},
	target_effect: {
		type: 1,
		text: '项目未生效',
		icon: 'downshelf',
		color: '#999999',
		font: 12,
		src: '',
		size: 80
	},
	target_exist: {
		type: 1,
		text: '项目不存在',
		icon: 'downshelf',
		color: '#999999',
		font: 12,
		src: '',
		size: 80
	},
	target_downshelf: {
		type: 1,
		text: '项目已下架',
		icon: 'downshelf',
		color: '#999999',
		font: 12,
		src: '',
		size: 80
	},
	activity: {
		type: 1,
		text: '活动已下架',
		icon: 'downshelf',
		color: '#999999',
		font: 12,
		src: '',
		size: 80
	},
	other: {
		type: 0,
		text: '其它错误',
		icon: '',
		color: '#999999',
		font: 12,
		src: '',
		size: 80
	}
}

// 其它主题信息
const other = {
	
}

/**
 * 字体的计算
 * style：字体类型。可以是数字或者系统字体（initial、small、large等等）；
 * 		也可以是'12px'，这种字符串。支持px和upx（0.5倍的px）。返回的数值统一是px单位
 * 	fontSize 既定主题信息中的基础值，是数字
 * 	fontScale 必须是大于1的值，如果小于1将要加1
 * forNumber：是否只返回数值
 */
const fontSize = (style = 'normal', obj = base, forNumber) => {
	
}

module.exports = {
	/**
	 * 主题信息更新的时间戳
	 * 该值会被记录进项目信息中，如果不一样会更新主题信息
	 * 更新主题信息时，要求更新项目的主题信息更新值
	 * 类似的还有basevalue
	 */
	updatetimestamp: 20241101,
	base, load, other, color, fontWeight, fontFamily,
	
	fontSize(style = 'normal', obj = base, forNumber) {
		return sizeAction(style, obj, forNumber)
	},
	
	/**
	 * 主题信息初始化 - 读取本地主题信息或者代码默认值
	 * res：是该项目的所有主题信息。需获取该项目的通用主题，以及比对其它主题的生效时间范围
	 */
	initial(res) {
		if (res.length > 0) {
			var theme, common
			const current = core.store.current || Date.now()
			for (let i = 0; i < res.length; i++) {
				// 找通用主题
				if (core.info.target.theme && res[i]._id === core.info.target.theme) {
					common = res[i]
				} else {
					/**
					 * 找更符合时间范围的主题
					 * 如果存在多个，哪个的开始时间距离此刻最近，使用哪个
					 */
					if (res[i].time && res[i].time.length === 2 && res[i].time[0] < current && res[i].time[1] > current) {
						if (theme) {
							if (res[i].time[0] > theme.time[0]) {
								theme = res[i]
							}
						} else {
							theme = res[i]
						}
					}
				}
			}
			if (!theme) {
				// 使用通用主题
				theme = common
			}
			if (theme) {
				/**
				 * 主题信息初始化
				 * 1，逐个遍历，根据特点赋值给全局主题
				 * 2，将全局主题赋值给当前页面
				 * 3，将主题信息写入本地存储
				 */
				Object.keys(theme).forEach(key => {
					const value = theme[key]
					if (value) {
						if (key.indexOf('_color') > -1) {
							// 颜色值
							color[key.split('_color')[0]] = value
						} else if (key.indexOf('_weight') > -1) {
							// 字重 - 这个目前没有
							fontWeight[key.split('_weight')[0]] = value
						} else if (key.indexOf('load_') > -1) {
							// 加载状态的图片
							value && Object.keys(value).forEach(key => {
								if (value[key]) {
									load[key.split('load_')[1]] = value[key]
								}
							})
						} else if (key.indexOf('fontFamily_') > -1) {
							// 字体类型
							const newKey = key.split('fontFamily_')[1]
							fontFamily[newKey] = value
						} else {
							let bool = true
							// 基础数值
							const baseKey = Object.keys(base)
							for (let i = 0; i < baseKey.length; i++) {
								if (baseKey[i] === key) {
									if (value) {
										base[key] = value
									}
									bool = false
									break
								}
							}
							if (bool) {
								// 给其它字段赋值
								other[key] = value
							}
						}
					}
				})
			}
			// 动态加载字体
			if (!core.isDevelopment || 1) {
				Object.keys(fontFamily).forEach(key => {
					// 以项目中的设定为主，其次加载主题信息中的字体
					var url = fontFamily[key]
					if (core.info.target.fontFamily && core.info.target.fontFamily[key]) {
						url = core.info.target.fontFamily[key]
					}
					if (url) {
						uni.downloadFile({
							url,
							header: { // 下载会有跨域问题，疑似未解决
								"Access-Control-Expose-Headers": "Content-Disposition"
							},
							success(res) {
								if (res.tempFilePath) {
									uni.loadFontFace({
										family: key,
										source: `url(${res.tempFilePath})`,
										success() {
											console.log(`加载了字体：${key}`)
										},
										fail(err) {
											console.log(err)
										}
									})
								}
							}
						})
					}
				})
			}
		}
	}
}